#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_TREE_SIZE 100
// 双亲表示法
typedef struct ptnode // 双亲结点类型
{
    char data;  // 树结点数据域
    int parent; // 双亲位置域
} PTNode;

typedef struct
{
    PTNode nodes[MAX_TREE_SIZE];
    int n; // 结点数
} PTree;

// 孩子链表法
typedef struct cnode // 孩子结点类型
{
    int child; // 孩子结点在指针数组中的序号
    struct cnode *next;
} CNode;

typedef struct
{
    char data;         //  树结点数据域
    CNode *firstchild; // 孩子结点头指针
} PANode;
typedef struct
{
    PANode nodes[MAX_TREE_SIZE]; // 指针数组
    int n;                       // 结点数
    int r;                       // 根结点在指针数组中的位置(即下标)
} CTree;

// 孩子兄弟表示法
typedef struct cbnode // 同二叉链表结构
{
    char data;
    struct cbnode *firstchild;  //  第一个孩子结点
    struct cbnode *nextsibling; // 下一个兄弟结点
} CBTree;